﻿using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SouthApps.MobileHealth.SDK.DAL.Model;
using System.Data.Objects;

namespace SouthApps.MobileHealth.SDK.DAL.DataAccess
{
    public class EspecialidadDao : DataAccessObject
    {
        #region Add

        public void AddEspecialidad(Especialidad especialidad)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    entities.AddToespecialidad(especialidad);
                    
                    this.SaveChanges(entities);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Modify

        public void ModifyEspecialidad(Especialidad especialidad)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    Especialidad oldEspecialidad = entities.especialidad.FirstOrDefault(e => e.especialidadId == especialidad.especialidadId);
                    oldEspecialidad = especialidad;

                    this.SaveChanges(entities);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Get

        public List<Especialidad> GetEspecialidades(int financiadorId)
        {
            return this.GetEspecialidades(financiadorId, true);
        }

        public List<Especialidad> GetEspecialidades(int financiadorId, bool activo)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    var query = from e in entities.especialidad
                                where e.financiadorId == financiadorId && e.activo == activo
                                select e;

                    return query.ToList();
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        public List<Especialidad> GetEspecialidadesPlan(int financiadorId, int planId)
        {
            return this.GetEspecialidadesPlan(financiadorId, planId, true);
        }

        public List<Especialidad> GetEspecialidadesPlan(int financiadorId, int planId, bool activo)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    var query = ((from e in entities.especialidad
                                join c in entities.convenio on e.especialidadId equals c.especialidadId
                                where e.financiadorId == financiadorId && e.activo == activo
                                where c.planId ==planId
                                 select e) as ObjectQuery<Especialidad>).Distinct();

                    return query.ToList();
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion
    }
}
